/**
 *
 */
package com.angel.io.processors.runners.imports;

import java.io.InputStream;
import java.util.List;

import com.angel.io.exceptions.InvalidRowDataException;

/**
 * @author William
 *
 */
public interface ImportProcessorRunner {

	/** Add an alias name for a column at input stream to process. It is bidireccional, so columnName or aliasName parameters can be
	 * an input stream column. First it tests, if in the input stream there is a column with its name "columnName", it adds "aliasName" as alias for "columnName".
	 * If not, it adds an alias named "columnName" for the input stream column "aliasName".
	 *
	 *
	 * @param columnName to test add an alias.
	 * @param aliasName to test add as alias.
	 */
	public void addAliasFor(String columnName, String aliasName);

	/** Add a list' alias names to a column name. It called iteratively to addAliasFor method.
	 *
	 * @param columnName to test add a list alias names.
	 * @param aliasNames list to test add as alias.
	 */
	public void addAliasFor(String columnName, List<String> aliasNames);

	/**
	 * Runs processing input stream.
	 *
	 * @param inputStream to be procced.
	 * @param pages to process. Each file processor must interpeters how a page is.
	 * @return a list's object proceed.
	 * @throws InvalidRowDataException when a row has invalid data.
	 */
	public <T> List<T> runProcess(InputStream inputStream, Integer... pages) throws InvalidRowDataException;

}
